#include <iostream>
#include "mprpcapplication.h"
#include "friend.pb.h"
#include "mprpccontroller.h"
#include"logger.h"

int main(int argc, char *argv[])
{
    // LOG_INFO("first log message");
    // LOG_ERR("%s %s %d",__FILE__,__FUNCTION__,__LINE__);
    // 整个程序启动之后，想使用mprpc框架来享受服务调用，一定要先使用框架的初始化函数

    MprpcApplication::Init(argc, argv);
    // 演示如何调用远程发布的rpc方法Login

    fixbug::FriendServiceRpc_Stub stub(new MpRpcChannel());
    // stub.Login(); // RpcChannel ->RpcChannel::callmethod 集中来做所有的rpc方法调用的参数序列化和网络发送
    fixbug::GetFriendRequest request;
    request.set_userid(11000);

    fixbug::GetFriendResponse response;
    MprpcController contorller;
    // 发起rpc调用，参数是请求对象和响应对象，是同步的
    stub.GetFriendList(&contorller, &request, &response, nullptr);
    // stub.GetFriendList(nullptr, &request, &response, nullptr);

    // rpc待用完成，都调用的结果 z这个result 是看定义的protubuf的参数

    if (contorller.Failed())
    {
        std::cout << contorller.ErrorText() << std::endl;
    }
    else
    {
        if (response.result().errcode() == 0) // 这个0是约定好了的
        {
            std::cout << "rpc getfriendlist response success :" << std::endl;

            int size = response.friends_size();
            std::cout << "total:" << size << std::endl;
            for (int i = 0; i < size; i++)
            {
                std::cout << "index:" << i + 1 << "name:" << response.friends(i) << std::endl;
            }
        }
        else
        {
            std::cout << "rpc getfriendlist response error:" << response.result().errmsg() << std::endl;
        }
    }

    return 0;
}